home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / misc / emu / QDOS2.lha / QLsource / ROMsrc / SYS / ARITH_asm next >
Text File  |  1995-10-22  |  18KB  |  888 lines

  1. */beginfile ARITH_asm
  2. ; --------------------------------------------------------------
  3. ; ARITH_asm - QDOS arithmetic routines
  4. ;       - last modified 22/10/95
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;    ...some changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8. ;*/beginoverlay
  9. ;*/note routine moved for RI.EXEC fix
  10. RI_EXEC_a1:
  11.     MOVE.L    A6,-(A7)
  12.     SUBA.L    A6,A6
  13.     BSR.S    RI_EXEC
  14.     BRA.S    L041A4
  15. RI_A1_EXecb:
  16.     MOVE.L    A6,-(A7)
  17.     SUBA.L    A6,A6
  18.     BSR.S    RI_EXECB
  19. L041A4    BEQ.S    L041A8
  20.     MOVEQ    #0,D2
  21. L041A8    MOVEA.L    (A7)+,A6
  22.     RTS
  23. RI_EXEC    ; operation with code in D0
  24.     MOVEM.L    D1-D3/A0/A2-A3/A5,-(A7)
  25.     SUBA.L    A5,A5
  26.     BRA.S    L041C0
  27. RI_EXECB ; list of operations (A5)
  28.     MOVEM.L    D1-D3/A0/A2-A3/A5,-(A7)
  29.     MOVEA.L    A3,A5
  30. L041BA:
  31. ;*/insertcode
  32.     move.l    a5,d0    ;*/mend
  33.     beq.s    L041F8    ;*/mend
  34. ;*/endinsertcode
  35. ;*/endoverlay
  36.     MOVEQ    #0,D0
  37.     MOVE.B    (A5)+,D0
  38.     BEQ.S    L041F8
  39. L041C0    CMPI.B    #$30,D0
  40.     BHI.S    L041CC
  41.     BSR.S    L041FE
  42.     BNE.S    L041F8
  43.     BRA.S    L041BA
  44. L041CC    ORI.W    #$FF00,D0
  45.     BCLR    #0,D0
  46.     ADDA.W    D0,A4
  47.     BNE.S    L041DE
  48.     SUBQ.W    #6,A1
  49.     BSR.S    L041EA
  50.     BRA.S    L041E6
  51. L041DE    EXG    A4,A1
  52.     BSR.S    L041EA
  53.     EXG    A1,A4
  54.     ADDQ.W    #6,A1
  55. L041E6    SUBA.W    D0,A4
  56.     BRA.S    L041BA
  57. L041EA    MOVE.W    0(A6,A4.L),0(A6,A1.L)
  58.     MOVE.L    2(A6,A4.L),2(A6,A1.L)
  59.     RTS
  60. L041F8    MOVEM.L    (A7)+,D1-D3/A0/A2-A3/A5
  61.     RTS
  62. L041FE    MOVE.W    JMP_RI_Exec-2(PC,D0.W),D0
  63.     JMP    JMP_RI_Exec(PC,D0.W)
  64. JMP_RI_Exec:
  65.     DC.W    RI_NINT-JMP_RI_Exec
  66.     DC.W    RI_INT-JMP_RI_Exec
  67.     DC.W    RI_NLINT-JMP_RI_Exec
  68.     DC.W    RI_FLOAT-JMP_RI_Exec
  69.     DC.W    RI_ADD-JMP_RI_Exec
  70.     DC.W    RI_SUB-JMP_RI_Exec
  71.     DC.W    RI_MULT-JMP_RI_Exec
  72.     DC.W    RI_DIV-JMP_RI_Exec
  73.     DC.W    RI_ABS-JMP_RI_Exec
  74.     DC.W    RI_NEG-JMP_RI_Exec
  75.     DC.W    RI_DUP-JMP_RI_Exec
  76.     DC.W    RI_COS-JMP_RI_Exec
  77.     DC.W    RI_SIN-JMP_RI_Exec
  78.     DC.W    RI_TAN-JMP_RI_Exec
  79.     DC.W    RI_COT-JMP_RI_Exec
  80.     DC.W    RI_ASIN-JMP_RI_Exec
  81.     DC.W    RI_ACOS-JMP_RI_Exec
  82.     DC.W    RI_ATAN-JMP_RI_Exec
  83.     DC.W    RI_ACOT-JMP_RI_Exec
  84.     DC.W    RI_SQRT-JMP_RI_Exec
  85.     DC.W    RI_LN-JMP_RI_Exec
  86.     DC.W    RI_LOG10-JMP_RI_Exec
  87.     DC.W    RI_EXP-JMP_RI_Exec
  88.     DC.W    RI_POWFP-JMP_RI_Exec
  89. RI_SIN:
  90.     MOVEM.L    D4-D7/A4,-(A7)
  91.     MOVEQ    #0,D7
  92.     BRA.S    L04248
  93. RI_COS:
  94.     MOVEM.L    D4-D7/A4,-(A7)
  95.     JSR    RI_ABS(PC)    ;*/undomodify BSR RI_ABS
  96.     MOVEQ    #-1,D7
  97. L04248    JSR    L04684(PC)    ;*/undomodify BSR L04684
  98.     BNE.S    L042B0
  99.     BSR.S    L042B6
  100.     LEA    L045AE(PC),A4    ; (MJS)
  101.     BSR.S    L042C6
  102.     BTST    #0,D7
  103.     BEQ.S    L042B0
  104.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  105.     BRA.S    L042B0
  106. RI_TAN:
  107.     MOVEM.L    D4-D7/A4,-(A7)
  108.     MOVEQ    #0,D6
  109.     BRA.S    L04274
  110. RI_COT:
  111.     MOVEM.L    D4-D7/A4,-(A7)
  112.     MOVEQ    #-$01,D6
  113.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  114. L04274:
  115.     MOVEQ    #0,D7
  116.     JSR    L04674(PC)    ;*/undomodify BSR L04674
  117.     BNE.S    L042B0
  118.     EOR.B    D6,D7
  119.     BSR.S    L042B6
  120.     LEA    L045D6(PC),A4
  121.     JSR    L04726(PC)    ;*/undomodify BSR L04726
  122.     ADDQ.W    #6,A1
  123.     BSR.S    L042CA
  124.     SUBQ.W    #6,A1
  125.     MOVE.L    -10(A6,A1.L),2(A6,A1.L)
  126.     MOVE.W    -12(A6,A1.L),0(A6,A1.L)
  127.     BTST    #0,D7
  128.     BEQ.S    L042AA
  129.     JSR    RI_SWAP(PC)    ;*/undomodify BSR RI_SWAP
  130.     JSR    RI_NEG(PC)    ;*/modify JSR RI_NEG
  131.                 ;*/note absolute address!
  132.                 ;*/undomodify BSR RI_NEG
  133.     nop            ;*/modify
  134.                 ;*/note JSR(PC) < JSR
  135. L042AA    JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  136. L042AE    MOVEQ    #0,D0
  137. L042B0    MOVEM.L    (A7)+,D4-D7/A4
  138.     RTS
  139. L042B6    JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  140. L042BA    JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  141.     JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  142.     JMP    RI_MULT(PC)    ;*/undomodify BRA RI_MULT
  143. L042C6    JSR    L0472C(PC)    ;*/undomodify BSR L0472C
  144. L042CA    JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  145.     JMP    RI_ADD(PC)    ;*/undomodify BRA RI_ADD
  146. L042D2    SUBQ.W    #6,A1
  147.     CLR.W    4(A6,A1.L)
  148.     MOVE.L    #$08014000,0(A6,A1.L) ; Floatingpoint 1.0
  149.     JMP    RI_SWAP(PC)    ;*/undomodify BRA RI_SWAP
  150. RI_ACOS:
  151.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  152.     BSR.S    RI_ASIN
  153.     BNE.S    L0431C
  154.     BSR.S    L0430C
  155.     JMP    RI_ADD(PC)    ;*/undomodify BRA RI_ADD
  156. RI_ASIN:
  157.     BSR.S    L042BA
  158.     BSR.S    L042D2
  159.     JSR    RI_SUB(PC)    ;*/undomodify BSR RI_SUB
  160.     BSR    RI_SQRT
  161.     BNE.S    L0431C
  162.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  163.     BEQ.S    RI_ATAN
  164.     BSR.S    L0430C
  165.     JMP    RI_MULT(PC)    ;*/undomodify BRA RI_MULT
  166. L0430C    SUBQ.W    #6,A1
  167.     MOVE.L    #$6487ED51,2(A6,A1.L) ; PI/2
  168.     MOVE.W    #$0801,0(A6,A1.L)
  169. L0431C    RTS
  170. RI_ACOT:
  171.     MOVEM.L    D4-D7/A4,-(A7)
  172.     MOVEQ    #$02,D7
  173.     BRA.S    L0432C
  174. RI_ATAN:
  175.     MOVEM.L    D4-D7/A4,-(A7)
  176.     MOVEQ    #0,D7
  177. L0432C    TST.B    2(A6,A1.L)
  178.     BGE.S    L04338
  179.     ADDQ.B    #4,D7
  180.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  181. L04338    CMPI.W    #$0800,0(A6,A1.L)
  182.     BLE.S    L0434A
  183.     BSR.S    L042D2
  184.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  185.     BCHG    #$01,D7
  186. L0434A    JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  187.     SUBQ.W    #6,A1
  188.     MOVE.L    #$4498517A,2(A6,A1.L) ;*/mend MOVE.L #$4498517A,2(A6,A1.W)
  189.     MOVE.W    #$07FF,0(A6,A1.L) ; 0.2679492
  190.     JSR    RI_SUB(PC)    ;*/undomodify BSR RI_SUB
  191.     ADDQ.W    #6,A1
  192.     TST.B    -$04(A6,A1.L)
  193.     BLE.S    L04378
  194.     LEA    L045F2(PC),A4    ; (MJS)
  195.     JSR    L04726(PC)    ;*/undomodify BSR L04726
  196.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  197.     ADDQ.B    #1,D7
  198. L04378    BSR    L042B6
  199.     LEA    L0461A(PC),A4    ; (MJS)
  200.     JSR    L04726(PC)    ;*/undomodify BSR L04726
  201.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  202.     BSR    L042CA
  203.     LSR.B    #1,D7
  204.     BCC.S    L043A4
  205.     SUBQ.W    #6,A1
  206.     MOVE.L    #$430548E1,2(A6,A1.L) ; 0.5235988
  207.     MOVE.W    #$0800,0(A6,A1.L)
  208.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  209. L043A4    LSR.B    #1,D7
  210.     BCC.S    L043B4
  211.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  212.     BSR    L0430C
  213.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  214. L043B4    LSR.B    #1,D7
  215.     BCC    L042AE
  216.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  217.     BRA    L042B0
  218. RI_POWFP:
  219.     MOVE.W    0(A6,A1.L),D1
  220.     BEQ.S    L043E6
  221.     MOVE.W    #$080F,D0
  222.     SUB.W    D1,D0
  223.     BLT.S    L043F0
  224.     CMPI.W    #$000F,D0
  225.     BGT.S    L043F0
  226.     MOVE.L    2(A6,A1.L),D1
  227.     TST.W    D1
  228.     BNE.S    L043F0
  229.     ASR.L    D0,D1
  230.     TST.W    D1
  231.     BNE.S    L043F0
  232.     SWAP    D1
  233. L043E6    ADDQ.W    #4,A1
  234.     MOVE.W    D1,0(A6,A1.L)
  235.     JMP    L047DC(PC)    ;*/undomodify BRA L047DC
  236. L043F0    MOVEM.L    D4-D7/A4,-(A7)
  237.     MOVE.W    0(A6,A1.L),D4
  238.     MOVE.L    2(A6,A1.L),D5
  239.     ADDQ.W    #6,A1
  240.     TST.B    2(A6,A1.L)
  241.     BEQ.S    L04420
  242.     BSR.S    RI_LN
  243.     BNE    L042B0
  244.     SUBQ.W    #6,A1
  245.     MOVE.L    D5,2(A6,A1.L)
  246.     MOVE.W    D4,0(A6,A1.L)
  247.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  248.     BNE    L042B0
  249.     BRA    L044E4
  250. L04420    TST.B    -4(A6,A1.L)
  251.     BGE    L042AE
  252.     BRA    OV_ERR
  253. RI_LOG10:
  254.     BSR.S    RI_LN
  255.     BNE.S    L04444
  256.     SUBQ.W    #6,A1
  257.     MOVE.L    #$6F2DEC55,$02(A6,A1.L) ; 1/LN(10)
  258.     MOVE.W    #$07FF,0(A6,A1.L)
  259.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  260. L04444    RTS
  261. RI_LN:
  262.     MOVEM.L    D4-D7/A4,-(A7)
  263.     MOVE.W    0(A6,A1.L),D4
  264.     MOVE.L    2(A6,A1.L),D5
  265.     ADDQ.W    #6,A1
  266.     BLE    OV_ERR
  267.     MOVE.W    #$0800,D0
  268.     MOVE.L    D5,D1
  269.     LSR.L    #1,D5
  270.     CMPI.L    #$5A82799A,D1    ; floatingpoint 0.7071068
  271.     BGT.S    L04476
  272.     SUBQ.W    #1,D4
  273.     ADDI.L    #$20000000,D5
  274.     BCLR    #$1E,D1
  275.     BRA.S    L0447E
  276. L04476    BSET    #$1E,D5
  277.     BSET    #$1F,D1
  278. L0447E:
  279.     TST.L    D1
  280.     JSR    L04830(PC)    ;*/undomodify BSR L04830
  281.     SUBQ.W    #6,A1
  282.     MOVE.L    D5,2(A6,A1.L)
  283.     MOVE.W    #$0800,0(A6,A1.L)
  284.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  285.     BSR    L042B6
  286.     JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  287.     LEA    L04636(PC),A4    ; (MJS)
  288.     MOVE.W    D4,D7
  289.     JSR    L04726(PC)    ;*/undomodify BSR L04726
  290.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  291.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  292.     BSR    L042CA
  293.     SUBI.W    #$0800,D7
  294.     SUBQ.W    #2,A1
  295.     MOVE.W    D7,0(A6,A1.L)
  296.     JSR    RI_FLOAT(PC)    ;*/undomodify BSR RI_FLOAT
  297.     SUBQ.W    #6,A1
  298.     MOVE.L    #$58B90BFC,2(A6,A1.L) ; floatingpoint LN(2)
  299.     MOVE.W    #$0800,0(A6,A1.L)
  300.     BSR    L042CA
  301.     BRA    L042AE
  302. OV_ERR:
  303. */beginundoinsert
  304. ;     MOVEQ     #0,D0
  305. ;     MOVE.L     D0,2(A6,A1.L)     ; set Result to Zero
  306. ;     MOVE.W     D0,0(A6,A1.L)
  307. ;     BTST     #1,$28002     ; overflow enable ?
  308. ;     BNE.S     L044DA
  309. */endundoinsert
  310. L044D8:
  311.     MOVEQ    #-18,D0        ; signal overflow
  312. L044DA:
  313.     BRA    L042B0
  314. RI_EXP:
  315.     MOVEM.L    D4-D7/A4,-(A7)
  316.     MOVEQ    #0,D7
  317. L044E4    JSR    L04692(PC)    ;*/undomodify BSR L04692
  318.     BNE.S    L044DA
  319.     BSR    L042BA
  320.     LEA    L04658(PC),A4    ; (MJS)
  321.     JSR    L04726(PC)    ;*/undomodify BSR L04726
  322.     ADDQ.W    #6,A1
  323.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  324.     JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  325.     SUBQ.W    #6,A1
  326.     JSR    RI_SWAP(PC)    ;*/undomodify BSR RI_SWAP
  327.     JSR    RI_SUB(PC)    ;*/undomodify BSR RI_SUB
  328.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  329.     SUBQ.W    #6,A1
  330.     MOVE.L    #$40000000,$02(A6,A1.L) ; floatinpoint 0.5
  331.     MOVE.W    #$0800,0(A6,A1.L)
  332.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  333.     ADDQ.W    #1,D7
  334.     ADD.W    D7,0(A6,A1.L)
  335.     BRA    L042AE
  336. RI_SQRT:
  337.     MOVEM.L    D4-D7/A4,-(A7)
  338.     MOVE.W    0(A6,A1.L),D6
  339.     TST.L    2(A6,A1.L)
  340.     BEQ    L042AE
  341.     BLT.S    OV_ERR
  342.     LEA    L04666(PC),A4    ; (MJS)
  343.     MOVE.W    D6,D7
  344.     SUBI.W    #$0800,D7
  345.     SUB.W    D7,0(A6,A1.L)
  346.     ASR.W    #1,D7
  347.     BCC.S    L04554
  348.     LEA    L04674(PC),A4    ; (MJS)
  349. L04554    SWAP    D6
  350.     JSR    L0472C(PC)    ;*/undomodify BSR L0472C
  351.     SWAP    D6
  352.     ADD.W    D7,0(A6,A1.L)
  353.     MOVEQ    #1,D7
  354. L04562    JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  355.     SUBQ.W    #6,A1
  356.     MOVE.L    D5,2(A6,A1.L)
  357.     MOVE.W    D6,0(A6,A1.L)
  358.     JSR    RI_SWAP(PC)    ;*/undomodify BSR RI_SWAP
  359.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  360.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  361.     SUBQ.W    #1,0(A6,A1.L)
  362.     DBF    D7,L04562
  363.     BRA    L042AE
  364. L04588    DC.W    0
  365.     DC.L    0
  366. L0458E    DC.W    $07FE        ; -0.1666667
  367.     DC.L    $AAAAAAB0
  368. L04594    DC.W    $07FA        ; 8.33333E-3
  369.     DC.L    $444442DD
  370. L0459A    DC.W    $07F4        ; -1.984083E-4
  371.     DC.L    $97FA15C1
  372. L045A0    DC.W    $07EE        ; 2.752397E-6
  373.     DC.L    $5C5AE940
  374. L045A6    DC.W    $07E7        ; -2.386835E-8
  375.     DC.L    $997C79C0
  376. L045AC    DC.W    5
  377. L045AE    DC.W    $0801        ; 1.0
  378.     DC.L    $40000000
  379. L045B4    DC.W    $07FF        ; -0.4446948
  380.     DC.L    $8E287BC1
  381. L045BA    DC.W    $07FB        ; 1.597339E-2
  382.     DC.L    $416D50CD
  383. L045C0    DC.W    2
  384.     DC.W    0
  385.     DC.W    0
  386.     DC.W    0
  387. L045C8    DC.W    $07FD        ; -.1113614
  388.     DC.L    $8DF7443E
  389. L045CE    DC.W    $07F7        ; 1.075155E-3
  390.     DC.L    $46761A70
  391. L045D4    DC.W    2
  392. L045D6    DC.W    $0801        ; 1.732051
  393.     DC.L    $6ED9EBA1
  394. L045DC    DC.W    $0801        ; 1
  395.     DC.L    $40000000
  396. L045E2    DC.W    1
  397. L045E4    DC.W    $0800        ; -1
  398.     DC.L    $80000000
  399. L045EA    DC.W    $0801        ; 1.732051
  400.     DC.L    $6ED9EBA1
  401. L045F0    DC.W    1
  402. L045F2    DC.W    $0803        ; 4.32025
  403.     DC.L    $451FBEDF
  404. L045F8    DC.W    $0803        ; 4.752226
  405.     DC.L    $4C091DF8
  406. L045FE    DC.W    $0801        ; 1
  407.     DC.L    $40000000
  408. L04604    DC.W    2
  409.     DC.W    0
  410.     DC.W    0
  411.     DC.W    0
  412. L0460C    DC.W    $0801        ; -1.440083
  413.     DC.L    $A3D5AC3B
  414. L04612    DC.W    $0800        ; -.7200268
  415.     DC.L    $A3D62904
  416. L04618    DC.W    2
  417. L0461A    DC.W    $0803        ; -5.578874
  418.     DC.L    $A6BCEEE1
  419. L04620    DC.W    $0801        ; 1
  420.     DC.L    $40000000
  421. L04626    DC.W    1
  422. L04628    DC.W    $07FF        ; -.4649062
  423.     DC.L    $88FBE7C1
  424. L0462E    DC.W    $07FA        ; 1.360095E-2
  425.     DC.L    $6F6B44F3
  426. L04634    DC.W    1
  427. L04636    DC.W    $0800        ; .5
  428.     DC.L    $40000000
  429. L0463C    DC.W    $07FC        ; 5.356752E-2
  430.     DC.L    $6DB4CE83
  431. L04642    DC.W    $07F5        ; 2.972936E-4
  432.     DC.L    $4DEF09CA
  433. L04648    DC.W    2
  434. L0464A    DC.W    $07FF        ; .25
  435.     DC.L    $40000000
  436. L04650    DC.W    $07F9        ; 5.950426E-3
  437.     DC.L    $617DE4BA
  438. L04656    DC.W    1
  439. L04658    DC.W    $07FF        ; .41731
  440.     DC.L    $6AD4D402
  441. L0465E    DC.W    $0800        ; .59016
  442.     DC.L    $4B8A5CE6
  443. L04664    DC.W    1
  444. L04666    DC.W    $0800        ; .59016
  445.     DC.L    $4B8A5CE6
  446. L0466C    DC.W    $0800        ; .83462
  447.     DC.L    $6AD4D402
  448. L04672    DC.W    1
  449. L04674:
  450.     ADDQ.W    #1,0(A6,A1.L)
  451.     BSR.S    L04684
  452.     BNE.S    L046EE
  453.     SUBQ.W    #1,0(A6,A1.L)
  454.     MOVEQ    #0,D0
  455.     RTS
  456. L04684:
  457.     LEA    L04714(PC),A4
  458.     CMPI.W    #$0810,0(A6,A1.L)
  459.     BGT.S    OV_RTS
  460.     BRA.S    L0469E
  461. L04692:
  462.     LEA    L04726(PC),A4
  463.     CMPI.W    #$0809,0(A6,A1.L)
  464.     BGT.S    OV_RTS
  465. L0469E:
  466.     JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  467.     SUBQ.W    #6,A1
  468.     MOVE.L    -(A4),$02(A6,A1.L)
  469.     MOVE.W    -(A4),0(A6,A1.L)
  470.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  471.     TST.B    D7
  472.     BNE.S    L046C0
  473.     JSR    RI_NINT(PC)    ;*/undomodify BSR RI_NINT
  474.     MOVE.W    D1,D7
  475.     JSR    RI_FLOAT(PC)    ;*/undomodify BSR RI_FLOAT
  476.     BRA.S    L046D6
  477. L046C0:
  478.     JSR    RI_INT(PC)    ;*/undomodify BSR RI_INT
  479.     ADD.W    D1,D7
  480.     ADD.W    D1,0(A6,A1.L)
  481.     ADDQ.W    #1,0(A6,A1.L)
  482.     JSR    RI_FLOAT(PC)    ;*/undomodify BSR RI_FLOAT
  483.     SUBQ.W    #1,0(A6,A1.L)
  484. L046D6:
  485.     MOVE.W    0(A6,A1.L),D4
  486.     MOVE.L    $02(A6,A1.L),D5
  487.     BSR.S    L046F0
  488.     SUBQ.W    #6,A1
  489.     MOVE.L    D5,2(A6,A1.L)
  490.     MOVE.W    D4,0(A6,A1.L)
  491.     BRA.S    L046F0
  492. OV_RTS:
  493. */beginundoinsert
  494. ;     MOVEQ     #0,D0
  495. ;     MOVE.L     D0,2(A6,A1.L)     ; set result to 0
  496. ;     MOVE.W     D0,0(A6,A1.L)
  497. ;     BTST     #1,$28002     ; overflow enable ?
  498. ;     BNE.S     L046EE
  499. */endundoinsert
  500. L046EC:
  501.     MOVEQ    #-18,D0        ; signal overflow
  502. L046EE:
  503.     RTS
  504. L046F0    SUBQ.W    #6,A1
  505.     MOVE.L    -(A4),$02(A6,A1.L)
  506.     MOVE.W    -(A4),0(A6,A1.L)
  507.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  508.     JMP    RI_SUB(PC)    ;*/undomodify BRA RI_SUB
  509. L04702    DC.W    $07F0        ; -8.90891E-6
  510.     DC.L    $B54442D1
  511. L04708    DC.W    $0802        ; 3.141602 =  PI
  512.     DC.L    $64880000
  513. L0470E    DC.W    $07FF        ; .3183099
  514.     DC.L    $517CC1B7
  515. L04714    DC.W    $07F4        ; -2.121944E-4
  516.     DC.L    $90BFBE8F
  517. L0471A    DC.W    $0800        ; .6933594
  518.     DC.L    $58C00000
  519. L04720    DC.W    $0801        ; 1.442695
  520.     DC.L    $5C551D95
  521. L04726    BSR.S    L0472C
  522.     SUBQ.W    #6,A1
  523.     BRA.S    L04734
  524. L0472C    MOVE.W    0(A6,A1.L),D4
  525.     MOVE.L    2(A6,A1.L),D5
  526. L04734    MOVE.W    -(A4),D6
  527.     MOVE.L    -(A4),2(A6,A1.L)
  528.     MOVE.W    -(A4),0(A6,A1.L)
  529. L0473E    SUBQ.W    #6,A1
  530.     MOVE.L    D5,2(A6,A1.L)
  531.     MOVE.W    D4,0(A6,A1.L)
  532.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  533.     SUBQ.W    #6,A1
  534.     MOVE.L    -(A4),2(A6,A1.L)
  535.     MOVE.W    -(A4),0(A6,A1.L)
  536.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  537.     SUBQ.W    #1,D6
  538.     BGT.S    L0473E
  539.     RTS
  540. L04760    SUBQ.W    #6,A1
  541.     CLR.W    4(A6,A1.L)
  542.     MOVE.L    #$08004000,0(A6,A1.L) ; 0.5
  543.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  544. L04772    MOVE.W    0(A6,A1.L),D0
  545.     MOVE.L    2(A6,A1.L),D1
  546.     ADDQ.W    #2,A1
  547.     CLR.L    0(A6,A1.L)
  548.     SUBI.W    #$0800,D0
  549.     BGE.S    L04788
  550.     MOVEQ    #0,D0
  551. L04788    SUBI.W    #$001F,D0
  552.     NEG.W    D0
  553.     ASR.L    D0,D1
  554.     MOVE.L    D1,0(A6,A1.L)
  555.     RTS
  556. RI_NINT:
  557.     BSR.S    L04760
  558.     BRA.S    L0479C
  559. RI_INT:
  560.     BSR.S    L04772
  561. L0479C    ADDQ.L    #2,A1
  562.     CMPI.W    #$0010,D0
  563.     BLT.S    L047B4
  564.     BRA.S    L047B0
  565. RI_NLINT:
  566.     BSR.S    L04760
  567.     BRA.S    L047AC
  568. L047AA:
  569.     BSR.S    L04772
  570. L047AC    TST.W    D0
  571.     BLT.S    L047B4
  572. L047B0    MOVEQ    #0,D0
  573.     RTS
  574. L047B4:
  575. */beginundoinsert
  576. ;     BTST     #1,$28002     ; overflow enable ?
  577. ;     BNE.S     L047B0         ; don't set flag
  578. */endundoinsert
  579.     MOVEQ    #-18,D0        ; overflow error
  580.     RTS
  581. RI_FLOAT:
  582.     MOVE.W    #$081F,D0
  583.     MOVE.W    0(A6,A1.L),D1
  584.     ADDQ.W    #2,A1
  585.     EXT.L    D1
  586.     JMP    L04830(PC)    ;*/undomodify BRA.S L04830
  587.                 ;*/undomodify nop
  588. L047C8:
  589.     SUBQ.W    #6,A1
  590.     CLR.W    4(A6,A1.L)
  591.     MOVE.L    #$08014000,0(A6,A1.L) ; 1.0
  592.     JSR    RI_SWAP(PC)    ;*/undomodify BSR RI_SWAP
  593.     RTS
  594. L047DC    MOVEM.L    D4-D6,-(A7)
  595.     MOVE.W    0(A6,A1.L),D6
  596.     ADDQ.W    #2,A1
  597.     BGE.S    L047F2
  598.     NEG.W    D6
  599.     BSR.S    L047C8
  600.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  601.     BNE.S    L04824
  602. L047F2    BSR.S    L047C8
  603. L047F4    LSR.W    #1,D6
  604.     BCC.S    L04810
  605.     MOVE.W    0(A6,A1.L),D5
  606.     MOVE.L    $02(A6,A1.L),D4
  607.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  608.     SUBQ.W    #6,A1
  609.     BNE.S    L04822
  610.     MOVE.L    D4,2(A6,A1.L)
  611.     MOVE.W    D5,0(A6,A1.L)
  612. L04810    TST.W    D6
  613.     BEQ.S    L04820
  614.     JSR    RI_DUP(PC)    ;*/undomodify BSR RI_DUP
  615.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  616.     BNE.S    L04822
  617.     BRA.S    L047F4
  618. L04820    MOVEQ    #0,D0
  619. L04822    ADDQ.W    #6,A1
  620. L04824    MOVEM.L    (A7)+,D4-D6
  621.     RTS
  622. RI_SUB:
  623.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  624.     BRA.S    RI_ADD
  625. L04830    SUBQ.W    #6,A1
  626.     MOVEQ    #0,D2
  627.     TST.L    D1
  628.     BRA.S    L04870
  629. RI_ADD:
  630.     ADDQ.W    #6,A1
  631.     MOVE.W    0(A6,A1.L),D0
  632.     SUB.W    -6(A6,A1.L),D0
  633.     BGE.S    L0485C
  634.     NEG.W    D0
  635.     CMPI.W    #$0020,D0
  636.     BGE.S    L048AE
  637.     MOVE.L    $02(A6,A1.L),D1
  638.     BSR.S    L048C2
  639.     MOVE.W    -6(A6,A1.L),D0
  640.     ADD.L    -4(A6,A1.L),D1
  641.     BRA.S    L04870
  642. L0485C    CMPI.W    #$0020,D0
  643.     BGE.S    L048BE
  644.     MOVE.L    -4(A6,A1.L),D1
  645.     BSR.S    L048C2
  646.     MOVE.W    0(A6,A1.L),D0
  647.     ADD.L    2(A6,A1.L),D1
  648. L04870    BVS.S    L04898
  649.     BEQ.S    L048AA
  650.     MOVE.L    D1,D3
  651.     ADD.L    D3,D3
  652.     BVS.S    L048B6
  653.     SUB.L    D2,D3
  654.     BVC.S    L04880
  655.     ADD.L    D2,D3
  656. L04880    SUBQ.W    #1,D0
  657.     MOVE.L    D3,D1
  658.     MOVEQ    #$10,D2
  659. L04886    MOVE.L    D1,D3
  660.     ASL.L    D2,D3
  661.     BVS.S    L04892
  662.     MOVE.L    D3,D1
  663.     SUB.W    D2,D0
  664.     BLT.S    L048A6
  665. L04892    ASR.L    #1,D2
  666.     BNE.S    L04886
  667.     BRA.S    L048B6
  668. L04898    ROXR.L    #1,D1
  669.     ADDQ.W    #1,D0
  670.     BTST    #12,D0
  671.     BEQ.S    L048B6
  672.     MOVEQ    #-$12,D0     ;*/undomodify BRA OV_RTS
  673.     RTS            ;*/restorecode
  674. L048A6    NEG.W    D0
  675.     ASR.L    D0,D1
  676. L048AA    CLR.W    D0
  677.     BRA.S    L048B6
  678. L048AE    MOVE.W    -6(A6,A1.L),D0
  679.     MOVE.L    -4(A6,A1.L),D1
  680. L048B6    MOVE.L    D1,2(A6,A1.L)
  681.     MOVE.W    D0,0(A6,A1.L)
  682. L048BE    MOVEQ    #0,D0
  683.     RTS
  684. L048C2    MOVEQ    #0,D2
  685.     TST.W    D0
  686.     BEQ.S    L048DC
  687.     ASR.L    D0,D1
  688.     BCC.S    L048DC
  689.     ADDQ.L    #1,D1
  690.     MOVEQ    #1,D2
  691.     SUBQ.W    #1,D0
  692.     BGT.S    L048DC
  693.     BCLR    #0,D1
  694.     BEQ.S    L048DC
  695.     MOVEQ    #-1,D2
  696. L048DC    RTS
  697. RI_MULT:
  698.     MOVEM.L    D4-D6,-(A7)
  699.     SF    D5
  700.     SF    D6
  701.     MOVE.L    2(A6,A1.L),D3
  702.     BGE.S    L048F4
  703.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  704.     MOVE.L    D1,D3
  705.     ST    D6
  706. L048F4    ADDQ.W    #6,A1
  707.     MOVE.L    2(A6,A1.L),D1
  708.     BGT.S    L04904
  709.     BEQ.S    L0496A
  710.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  711.     ST    D5
  712. L04904    LSL.L    #1,D1
  713.     MOVE.L    D1,D0
  714.     SWAP    D0
  715.     LSL.L    #1,D3
  716.     MOVE.L    D3,D2
  717.     SWAP    D2
  718.     MOVE.W    D3,D4
  719.     MULU    D1,D4
  720.     CLR.W    D4
  721.     SWAP    D4
  722.     MULU    D0,D3
  723.     MULU    D2,D1
  724.     ADD.L    D4,D3
  725.     ADD.L    D3,D1
  726.     MOVE.W    D1,D4
  727.     CLR.W    D1
  728.     SWAP    D1
  729.     ROXR.W    #1,D1
  730.     ROXL.L    #1,D1
  731.     MULU    D0,D2
  732.     MOVE.W    0(A6,A1.L),D0
  733.     ADD.W    -6(A6,A1.L),D0
  734.     SUBI.W    #$0800,D0
  735.     BLT.S    L04956
  736.     ADD.L    D2,D1
  737.     BMI.S    L04948
  738.     BEQ.S    L04956
  739.     SUBQ.W    #1,D0
  740.     BLT.S    L04956
  741.     ASL.W    #1,D4
  742.     BRA.S    L0494A
  743. L04948    LSR.L    #1,D1
  744. L0494A    MOVEQ    #0,D4
  745.     ADDX.L    D4,D1
  746.     BPL.S    L0495A
  747.     LSR.L    #1,D1
  748.     ADDQ.W    #1,D0
  749.     BRA.S    L0495A
  750. L04956    CLR.W    D0
  751.     CLR.L    D1
  752. L0495A    MOVE.L    D1,2(A6,A1.L)
  753.     MOVE.W    D0,0(A6,A1.L)
  754.     CMP.B    D5,D6
  755.     BEQ.S    L0496A
  756.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  757. L0496A:
  758.     MOVEM.L    (A7)+,D4-D6
  759.     BTST    #4,0(A6,A1.L)
  760.     BNE.S    L0497A        ;*undomodify BNE.S OV_RTS
  761.     MOVEQ    #0,D0
  762.     RTS
  763. L0497A:
  764.     MOVEQ    #-$12,D0     ;*/restorecode
  765.     RTS            ;*/restorecode
  766. L0497E:
  767. RI_DIV:
  768.     MOVE.L    D4,-(A7)
  769.     MOVE.L    D5,-(A7)
  770.     SF    D5        ; Signal +
  771.     MOVE.L    2(A6,A1.L),D2    ; mantissa 1
  772.     BGT.S    L04994
  773.     BEQ.S    RI_A1_OVerflow    ; X/0
  774.     JSR    RI_NEG(PC)    ;*/undomodify BSR.S RI_NEG
  775.                 ;*/undomodify nop
  776.     MOVE.L    D1,D2
  777.     ST    D5        ; signal -
  778. L04994:
  779.     ADDQ.W    #6,A1
  780.     MOVE.L    2(A6,A1.L),D1    ; mantissa 2
  781.     BGT.S    L049A4
  782.     BEQ.S    L049F6        ; 0/x is simple
  783.     JSR    RI_NEG(PC)    ;*/undomodify BSR.S RI_NEG
  784.                 ;*/undomodify nop
  785.     NOT.B    D5        ; signal +/- depending on
  786.                 ; first argument
  787. L049A4    MOVE.W    0(A6,A1.L),D0    ; exponent 2
  788.     ADDI.W    #$0800,D0
  789.     SUB.W    -6(A6,A1.L),D0    ; eponent 1
  790.     BGE.S    L049B8
  791.     CLR.W    D0
  792.     CLR.L    D3
  793.     BRA.S    L049E6
  794. L049B8    BTST    #12,D0
  795.     BNE.S    RI_OVERFlow    ; overflow
  796.     MOVEQ    #$1F,D4
  797.     MOVEQ    #0,D3        ; D2 / D1 -> D3
  798. L049C2    SUB.L    D2,D1
  799.     BCS.S    L049CA
  800.     BSET    D4,D3
  801.     BRA.S    L049CC
  802. L049CA    ADD.L    D2,D1
  803. L049CC    ADD.L    D1,D1
  804.     DBEQ    D4,L049C2
  805.     TST.L    D3
  806.     BLT.S    L049DE
  807.     SUB.L    D1,D2
  808.     BHI.S    L049E6
  809.     ADDQ.L    #1,D3
  810.     BVC.S    L049E6
  811. L049DE    ADDQ.W    #1,D0
  812.     LSR.L    #1,D3
  813.     MOVEQ    #0,D1
  814.     ADDX.L    D1,D3
  815. L049E6:
  816.     MOVE.L    D3,2(A6,A1.L)    ; Result mantissa
  817.     MOVE.W    D0,0(A6,A1.L)    ; exponent
  818.     TST.B    D5
  819.     BEQ.S    L049F6
  820.     JSR    RI_NEG(PC)    ;*/undomodify BSR.S RI_NEG
  821.                 ;*/undomodify nop
  822. L049F6:
  823.     MOVEQ    #0,D0
  824. L049F8:
  825.     MOVE.L    (A7)+,D5
  826.     MOVE.L    (A7)+,D4
  827.     TST.L    D0
  828.     RTS
  829. L04A00:
  830. RI_A1_OVerflow:
  831.     ADDQ.W #6,A1
  832. RI_OVERFlow:
  833. */beginundoinsert
  834. ;     MOVE.W     #$0FEB,0(A6,A1.L) ; Make a big number
  835. ;     MOVEQ     #0,D0
  836. ;     BTST     #1,$28002     ; overflow enable ?
  837. ;     BNE.S     L049F8
  838. */endundoinsert
  839. L04A02:
  840.     MOVEQ    #-$12,D0     ; overflow error
  841.     BRA.S    L049F8
  842. L04A06:
  843. RI_ABS:
  844.     TST.B    2(A6,A1.L)
  845.     BGE.S    L04A46
  846. L04A0C:
  847. RI_NEG:
  848.     MOVE.L    2(A6,A1.L),D1
  849.     NEG.L    D1
  850.     BVS.S    L04A2C
  851.     CMPI.L    #$C0000000,D1
  852.     BNE.S    L04A42
  853.     LSL.L    #1,D1
  854.     SUBQ.W    #1,0(A6,A1.L)
  855.     BGE.S    L04A42
  856.     ASR.L    #1,D1
  857.     CLR.W    0(A6,A1.L)
  858.     BRA.S    L04A42
  859. L04A2C    LSR.L    #1,D1
  860.     ADDQ.W    #1,0(A6,A1.L)
  861.     BTST    #4,0(A6,A1.L)
  862.     BEQ.S    L04A42
  863.     SUBQ.W    #1,0(A6,A1.L)
  864.     MOVEQ    #-1,D1
  865.     LSR.L    #1,D1
  866. L04A42    MOVE.L    D1,2(A6,A1.L)
  867. L04A46    MOVEQ    #0,D0
  868.     RTS
  869. RI_DUP:
  870.     SUBQ.W    #6,A1
  871. L04A4C:
  872.     MOVE.W    6(A6,A1.L),0(A6,A1.L)
  873.     MOVE.L    8(A6,A1.L),2(A6,A1.L)
  874.     MOVEQ    #0,D0
  875.     RTS
  876. L04A5C:
  877. RI_SWAP:
  878.     MOVE.W    0(A6,A1.L),D2
  879.     MOVE.L    2(A6,A1.L),D1
  880.     JSR    L04A4C(PC)    ;*/undomodify BSR.S L04A4C
  881.                 ;*/undomodify nop
  882.     MOVE.W    D2,6(A6,A1.L)
  883.     MOVE.L    D1,8(A6,A1.L)
  884.     MOVEQ    #0,D0
  885.     RTS
  886. ; --------------------------------------------------------------
  887. ;*/endfile
  888.